import matplotlib.pyplot as plt
from matplotlib.ticker import ScalarFormatter, FuncFormatter

# matplotlib允许你给散点图中的各个点指定颜色。默认为蓝色点和黑色轮廓，在散点图包含的
# 数据点不多时效果很好。但绘制很多点时，黑色轮廓可能会粘连在一起。要删除数据点的轮廓，
# 可在调用scatter()时传递实参edgecolor='none'：
# 修改数据点的颜色，可向scatter()传递参数c，并将其设置为要使用的颜色的名称

# 创建 Figure 对象并设置窗口尺寸（宽度, 高度）
plt.figure(figsize=(10, 6))  # 10英寸宽，6英寸高

# 使用 scatter() 绘制散点图并设置其样式
# x_values = list(range(1, 1000))
x_values = range(0, 1100, 100)
y_values = [i**2 for i in x_values]
# plt.scatter(x_values, y_values, s=40)
# plt.scatter(x_values, y_values, c='red', edgecolor='none', s=40)

# 还可以使用RGB颜色模式自定义颜色。三个0~1之间的小数值，它们分别表示红色、绿色和蓝色分量
# (0, 0, 0.8)淡蓝色点.值越接近0，指定的颜色越深，值越接近1，指定的颜色越浅
plt.scatter(x_values, y_values, c=(0, 0, 0.8), edgecolor='none', s=40)


# 设置全局中文字体（以 Windows 的 "SimHei" 为例）
plt.rcParams['font.sans-serif'] = ['SimHei']  # 指定黑体
plt.rcParams['axes.unicode_minus'] = False    # 解决负号显示问题

# 设置图表标题，并给坐标轴加上标签
plt.title("平方数图表", fontsize=24)
plt.xlabel("数值", fontsize=14)
plt.ylabel("平方值", fontsize=14)

# 设置每个坐标轴的聚会范围
plt.axis([0, 1100, 0, 1100000])

# 设置刻度标记的大小
plt.tick_params(axis='both', which='major', labelsize=14, width=2, colors='blue')

# 强制禁用科学计数法（更彻底的解决方案）
def format_y_ticks(value, _):
    return f"{int(value):,}"  # 格式化为整数并添加千位分隔符

plt.gca().yaxis.set_major_formatter(FuncFormatter(format_y_ticks))

# 获取当前 Figure 对象并设置窗口标题
fig = plt.gcf()
fig.canvas.manager.set_window_title("平方数图表")  # 修改窗口标题


plt.show()